package com.seek.util;
 
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLDecoder;

import org.apache.http.HttpResponse;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.seek.util.wechat.HttpClientUtil;
 
public class HttpRequestUtils {
    private static Logger logger = LoggerFactory.getLogger(HttpRequestUtils.class);    //日志记录

    /**
     * post请求
     * @param url         url地址
     * @return
     */
    public static String httpPost(String url,String json){
        //post请求返回结果
        DefaultHttpClient httpClient = new DefaultHttpClient();
        RequestConfig requestConfig = RequestConfig.custom()
            .setConnectTimeout(30000).setConnectionRequestTimeout(30000)
            .setSocketTimeout(30000).build();
        String jsonResult = null;
        HttpPost method = new HttpPost(url);
        method.setConfig(requestConfig);
        try {
            if (null != json) {
                //解决中文乱码问题
                StringEntity entity = new StringEntity(json, "utf-8");
                entity.setContentEncoding("UTF-8");
                entity.setContentType("application/json");
                method.setEntity(entity);
            }
            HttpResponse result = httpClient.execute(method);
            url = URLDecoder.decode(url, "UTF-8");
            /**请求发送成功，并得到响应**/
            if (result.getStatusLine().getStatusCode() == 200) {
                try {
                    /**读取服务器返回过来的json字符串数据**/
                	jsonResult = EntityUtils.toString(result.getEntity());
                    return jsonResult;
                } catch (Exception e) {
                    logger.error("post请求提交失败:" + url, e);
                }
            }
        } catch (IOException e) {
            logger.error("post请求提交失败:" + url, e);
        }
        return jsonResult;
    }
    
    public static String readContentFromPost(String url, String content) throws Exception {
    	logger.info("url=" + url + ":::::::::::content==" + content);
//        // Post请求的url，与get不同的是不需要带参数
//        URL postUrl = new URL(url);
//        // 打开连接
//        HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
//      
//        // 设置是否向connection输出，因为这个是post请求，参数要放在
//        // http正文内，因此需要设为true
//        connection.setDoOutput(true);
//        // Read from the connection. Default is true.
//        connection.setDoInput(true);
//        // 默认是 GET方式
//        connection.setRequestMethod("POST");
//       
//        // Post 请求不能使用缓存
//        connection.setUseCaches(false);
//       
//        connection.setInstanceFollowRedirects(true);
//       
//        // 配置本次连接的Content-type，配置为application/x-www-form-urlencoded的
//        // 意思是正文是urlencoded编码过的form参数，下面我们可以看到我们对正文内容使用URLEncoder.encode
//        // 进行编码
//        connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
//        // 连接，从postUrl.openConnection()至此的配置必须要在connect之前完成，
//        // 要注意的是connection.getOutputStream会隐含的进行connect。
//        connection.connect();
//        DataOutputStream out = new DataOutputStream(connection
//                .getOutputStream());
//        // The URL-encoded contend
////        // 正文，正文内容其实跟get的URL中 '? '后的参数字符串一致
////        String content = "account=" + URLEncoder.encode("一个大肥人", "UTF-8");
////        content +="&pswd="+URLEncoder.encode("两个个大肥人", "UTF-8");;
//        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写到流里面
//        out.writeBytes(content);
//
//        out.flush();
//        out.close(); 
//        
//        StringBuffer data = new StringBuffer();  
//        BufferedReader reader = new BufferedReader(new InputStreamReader(  
//                connection.getInputStream(), "UTF-8")); 
//        String line;
//        
//        while ((line = reader.readLine()) != null) {          
//            data.append(line);            
//        } 
//      
//        reader.close();
//        connection.disconnect();
    	
    	String result = HttpClientUtil.doHttpPost(url+"?"+content, "", 30, "utf-8");
        logger.info("返回：" + result);
        return result;
    }
    
    public static String readContentFromPostOld(String url, String content) throws Exception {
    	logger.info("url=" + url + ":::::::::::content==" + content);
        // Post请求的url，与get不同的是不需要带参数
        URL postUrl = new URL(url);
        // 打开连接
        HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
      
        // 设置是否向connection输出，因为这个是post请求，参数要放在
        // http正文内，因此需要设为true
        connection.setDoOutput(true);
        // Read from the connection. Default is true.
        connection.setDoInput(true);
        // 默认是 GET方式
        connection.setRequestMethod("POST");
       
        // Post 请求不能使用缓存
        connection.setUseCaches(false);
       
        connection.setInstanceFollowRedirects(true);
       
        // 配置本次连接的Content-type，配置为application/x-www-form-urlencoded的
        // 意思是正文是urlencoded编码过的form参数，下面我们可以看到我们对正文内容使用URLEncoder.encode
        // 进行编码
        connection.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
        // 连接，从postUrl.openConnection()至此的配置必须要在connect之前完成，
        // 要注意的是connection.getOutputStream会隐含的进行connect。
        connection.connect();
        DataOutputStream out = new DataOutputStream(connection
                .getOutputStream());
        // The URL-encoded contend
//        // 正文，正文内容其实跟get的URL中 '? '后的参数字符串一致
//        String content = "account=" + URLEncoder.encode("一个大肥人", "UTF-8");
//        content +="&pswd="+URLEncoder.encode("两个个大肥人", "UTF-8");;
        // DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写到流里面
        out.writeBytes(content);

        out.flush();
        out.close(); 
        
        StringBuffer data = new StringBuffer();  
        BufferedReader reader = new BufferedReader(new InputStreamReader(  
                connection.getInputStream(), "UTF-8")); 
        String line;
        
        while ((line = reader.readLine()) != null) {          
            data.append(line);            
        } 
      
        reader.close();
        connection.disconnect();

        return data.toString();
    }
}